const mongoose = require("mongoose");

const uploadSchema = new mongoose.Schema({
  // 文件哈希值（用于秒传验证）
  fileHash: {
    type: String,
    required: true,
    index: true,
  },

  // 原始文件名
  originalName: {
    type: String,
    required: true,
  },

  // 存储路径（相对于uploads目录）
  path: {
    type: String,
    required: true,
  },

  // 文件大小（字节）
  size: {
    type: Number,
    required: true,
  },

  // MIME类型
  mimeType: {
    type: String,
    required: true,
  },

  // 上传状态：pending（上传中）, completed（已完成）, failed（失败）
  status: {
    type: String,
    enum: ["pending", "completed", "failed", "deleting"],
    default: "pending",
  },

  // 上传完成时间
  completedAt: {
    type: Date,
    default: null,
  },
  // 解压缩路径（相对于项目根目录）
  extractPath: {
    type: String,
    default: null,
  },
  // 可执行文件名
  executableName: {
    type: String,
    default: null,
  },
  // 解压缩开始时间
  extractStartTime: {
    type: Date,
    default: null,
  },

  // 解压缩完成时间
  extractEndTime: {
    type: Date,
    default: null,
  },

  // 解压缩状态：pending（等待解压）, extracting（解压中）, completed（已完成）, failed（失败）, deleted（已删除解压文件）
  extractStatus: {
    type: String,
    enum: [
      "pending",
      "extracting",
      "completed",
      "failed",
      "deleted",
      "deleting",
    ],
    default: "pending",
  },
  // 创建时间
  createdAt: {
    type: Date,
    default: Date.now,
  },

  // 更新时间
  updatedAt: {
    type: Date,
    default: Date.now,
  },
});

// 更新updatedAt字段
uploadSchema.pre("save", function (next) {
  this.updatedAt = new Date();
  next();
});

const Upload = mongoose.model("Upload", uploadSchema);

module.exports = Upload;
